001 /* 002 * Copyright 2005 Stephen J. McConnell. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 013 * implied. 014 * 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 019 package net.dpml.lang; 020 021 import java.io.Serializable; 022 023 import java.util.Random; 024 025 /** 026 * The PID class is a process identifer. 027 * 028 * @author <a href="http://www.dpml.net">Digital Product Meta Library</a> 029 * @version 1.0.1 030 */ 031 public class PID implements Serializable 032 { 033 private final int m_value; 034 035 /** 036 * Creation of a new process identifier. 037 */ 038 public PID() 039 { 040 m_value = setupInitialValue(); 041 } 042 043 /** 044 * Creation of a new process identifier. 045 */ 046 private PID( int id ) 047 { 048 m_value = id; 049 } 050 051 private static int setupInitialValue() 052 { 053 String id = System.getProperty( "process.id" ); 054 if( null == id ) 055 { 056 return Math.abs( new Random().nextInt() ); 057 } 058 else 059 { 060 try 061 { 062 return Integer.parseInt( id ); 063 } 064 catch( NumberFormatException e ) 065 { 066 return Math.abs( new Random().nextInt() ); 067 } 068 } 069 } 070 071 /** 072 * Return the process identifier int value. 073 * @return the process id value 074 */ 075 public int getValue() 076 { 077 return m_value; 078 } 079 080 /** 081 * Return the string representation of this process identifier. 082 * @return the process identifier as a string 083 */ 084 public String toString() 085 { 086 return "[" + m_value + "]"; 087 } 088 089 /** 090 * Test if a supplied object is equal to this process identifier. 091 * @param other the object to compare with this object 092 * @return TRUE if the objects are equivalent 093 */ 094 public boolean equals( Object other ) 095 { 096 if( other instanceof PID ) 097 { 098 PID pid = (PID) other; 099 return getValue() == pid.getValue(); 100 } 101 else 102 { 103 return false; 104 } 105 } 106 107 /** 108 * Return the hashcode for this PID instance. 109 * @return the hashcode value 110 */ 111 public int hashCode() 112 { 113 return getValue(); 114 } 115 } 116